package com.onlinelibrary.util;

import com.onlinelibrary.pojo.User;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;

import java.util.Random;
import java.util.regex.Pattern;

@Component
public class UserUtil {

    @Value("${rule.user.username}")
    private String usernameRegex;

    @Value("${rule.user.password}")
    private String passwordRegex;

    @Value("${rule.user.email}")
    private String emailRegex;


    public boolean UserVerify(User user){
        if (user.getUsername()!=null){
            if (!Pattern.compile(usernameRegex).matcher(user.getUsername()).matches()) {
                return false;
            }
        }
        if (user.getPassword()!=null){
            if (!Pattern.compile(passwordRegex).matcher(user.getPassword()).matches()) {
                return false;
            }
        }
        if (user.getEmail()!=null){
            if (!Pattern.compile(emailRegex).matcher(user.getEmail()).matches()) {
                return false;
            }
        }
        return true;
    }

    public boolean isIDCard(String idCard) {
        if (idCard == null || idCard.trim().isEmpty()) {
            return false;
        }
        idCard = idCard.trim();
        String ID_CARD_15_REGEX = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|1\\d|2[0-8])\\d{3}(\\d|X|x)$";
        String ID_CARD_18_REGEX = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|1\\d|2[0-9]|3[0-1])\\d{3}(\\d|[0-9Xx])$";
        // 15位身份证现在已经很少用，但如果你需要支持，可以添加额外的逻辑
        if (idCard.matches(ID_CARD_18_REGEX)) {
            // 这里可以添加额外的18位身份证校验码验证逻辑，如果需要的话
            return true; // 或者返回校验码验证的结果
        } else return idCard.matches(ID_CARD_15_REGEX);
    }

    //注册时的格式校验
    public String RegisterVerify(User user) {
        if (!Pattern.compile(usernameRegex).matcher(user.getUsername()).matches()) {
            return "用户名格式错误";
        }
        if (!Pattern.compile(passwordRegex).matcher(user.getPassword()).matches()) {
            return "密码格式错误";
        }
        if (!Pattern.compile(emailRegex).matcher(user.getEmail()).matches()) {
            return "邮箱格式错误";
        }
        return null;
    }

    public String LoginVerify(User user) {
        System.out.println(user);
        if (!Pattern.compile(usernameRegex).matcher(user.getUsername()).matches()) {
            return "用户名格式错误";
        }
        if (!Pattern.compile(passwordRegex).matcher(user.getPassword()).matches()) {
            return "密码格式错误";
        }
        return null;
    }

    public String getCode() {
        return String.valueOf(new Random().nextInt(900000) + 100000);
    }

}
